﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using Persistencia_y_capa_de_negocio;

namespace webclonegame.FormulariosPublica
{
    public partial class empezar : System.Web.UI.Page
    {
        /// <summary>
        /// Objeto de tipo ENUsuario donde almaceno el usuario.
        /// </summary>
        protected ENUsuario usuario;
        /// <summary>
        /// Metodo que se ejecuta cuando se carga o recarga la página en el
        /// controlo cosas como la creación de la cookie de usuario, o el numero
        /// de intententos antes de redirigir a la pagina de recuperar contraseña.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {//Si es la primera vez que se carga la página
                 ViewState["ErroresLogin"] = 0;
                 foto1.Width = 150;
                 foto1.Height = 150;
                 Image1.Width = 150;
                 Image1.Height = 150;
            }

            //Cargar la cookie con usuario y contraseña
            HttpCookie ckusuario = Request.Cookies["UsuarioCG"];

            //Comprobar si existe una cookie con el nombre UsuarioCG
            if (ckusuario != null)
            {
                Login1.UserName = ckusuario["Cuenta"];
                TextBox pass = (TextBox)Login1.FindControl("Password");
                pass.Attributes.Add("value", ckusuario["Clave"]);
            }
            else
            {
                Login1.Focus();
            }

            //Con este código hacemos que funcione el control ValidationSummary1
            string vg1 = Login1.ClientID;
            ValidationSummary1.ValidationGroup = vg1.Replace("_", "$");

        }

        /// <summary>
        /// Evento que tiene lugar antes de producirse la autentificación en el control de Login
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e)
        {
            //Obetenemos el usuario con ese numero de cuenta de la BD, si es que existe.
            usuario = CADUsuario.Instancia.BuscarUsuarioPorCuenta(Login1.UserName.ToString());
        }

        /// <summary>
        /// Autentificación en el control de Login
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
        {

            if (usuario != null)
            {//Comprobamos que existe un usuario con ese numero de cuenta.
                CodMD5 comparar = new CodMD5();
                //Comprabamos si la contraseña introducida es correcta.
                if (comparar.comprobarMD5(Login1.Password.ToString(), usuario.PassUsuario))
                {
                    //En caso de que sea un usuario valido, la validación se realiza con exito.
                    e.Authenticated = true;
                }
            }


        }

        /// <summary>
        /// Evento que tiene lugar tras la autentificación en el control de login
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Login1_LoggedIn(object sender, EventArgs e)
        {
            //Si el usuario se ha registrado correctamente se ejecuta esta función
            //Si el usuario ha marcado la opción recordarme en este equipo
            //creamos una cookie que almacene su nombre y contraseña.
            //Si ya habia una se sobrescribira la misma. Comprobar.
            if (Login1.RememberMeSet == true)
            {
                HttpCookie ckusuario = new HttpCookie("UsuarioCG");
                //Añadimos el nombre de usuario
                ckusuario["Cuenta"] = Login1.UserName.ToString();
                //Añadimos la clave
                ckusuario["Clave"] = Login1.Password.ToString();
                //Determinamos el tiempo de validez de la cookie.Lo pongo para dos horas
                //a partir de la hora actual.
                ckusuario.Expires = DateTime.Now.AddHours(2);
                //Añado la cookie al disco duro del usuario.
                Response.Cookies.Add(ckusuario);
            }
            //Ahora creamos un objeto session que va a contener un objeto de tipo ENUsuario.
            Session["UsuarioActual"] = usuario;

        }

        /// <summary>
        /// Evento que tiene lugar cuando el usuario no se ha registrado correctamente.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Login1_LoginError(object sender, EventArgs e)
        {
            //Si la variable de aplicación LoginErrors no exite la creamos
            if (ViewState["ErroresLogin"] == null)
            {
                ViewState["ErroresLogin"] = 0;
            }
            //Incrementar el número de accesos incorrectos
            int ErrorCont = (int)ViewState["ErroresLogin"] + 1;
            ViewState["ErroresLogin"] = ErrorCont;
            // Comprobar el número de errores y si es superior a 3 enviar a la página de
            // recuperar contraseña.
            if ((ErrorCont >= 3) && (Login1.PasswordRecoveryUrl != string.Empty))
            {
                Response.Redirect(Login1.PasswordRecoveryUrl + "?usu=" + Server.UrlEncode(Login1.UserName.ToString()));
                //Incluso aqui podemos pasarle unos datos a la pagina de recuperar contraseña.
            }
        }



    }
}
